package com.acquisition.task.service;

import com.dcs.cn.common.util.hj212util.hbt212.exception.T212FormatException;
import com.dcs.cn.data.domain.DayData;
import com.dcs.cn.data.domain.HourData;
import com.dcs.cn.data.domain.MinuteData;
import com.dcs.cn.data.domain.RealTimeData;

import java.io.IOException;
import java.util.Map;

/**
 * hj212—2017协议
 * 业务逻辑层
 *
 * @author wuqiwei
 * @date 2021/02/22
 */
public interface Hj212Service {

    /**
     * hj212-2017版协议转成新版hj212-2017协议Map(实时数据)
     *
     * @param hj2017 hj212-2017版协议
     * @return Map<String, String>：第一个key是DataTime，value是对应的值，第二个key是data，value对应的是Data对象的json字符串
     * @throws IOException IOException
     * @throws T212FormatException T212FormatException
     */
    Map<String, String> hj2017To2017Map(String hj2017) throws IOException, T212FormatException;

    /**
     * hj212-2005旧版协议转成新版hj212-2017协议Map(实时数据)
     *
     * @param hj2005 hj212-2005旧版协议
     * @return Map<String, String>：第一个key是DataTime，value是对应的值，第二个key是data，value对应的是Data对象的json字符串
     * @throws IOException IOException
     * @throws T212FormatException T212FormatException
     */
    Map<String, String> hj2005To2017Map(String hj2005) throws IOException, T212FormatException;

    /**
     * 河北省版协议转成新版hj212-2017协议Map(实时数据)
     *
     * @param hebei 河北省版协议
     * @return Map<String, String>：第一个key是DataTime，value是对应的值，第二个key是data，value对应的是Data对象的json字符串
     */
    Map<String, String> hebeiTo2017Map(String hebei);

    /**
     * 组装实时数据为Hj212格式
     *
     * @param realTimeData realTimeData
     * @return 组好的报文，hj212-2017协议
     */
    String formRealTimeDataToHj212(RealTimeData realTimeData);

    /**
     * 组装分钟数据为Hj212格式
     *
     * @param minuteData minuteData
     * @return 组好的报文，hj212-2017协议
     */
    String formMinuteDataToHj212(MinuteData minuteData);

    /**
     * 组装小时数据为Hj212格式
     *
     * @param hourData hourData
     * @return 组好的报文，hj212-2017协议
     */
    String formHourDataToHj212(HourData hourData);

    /**
     * 组装日数据为Hj212格式
     *
     * @param dayData dayData
     * @return 组好的报文，hj212-2017协议
     */
    String formDayDataToHj212(DayData dayData);

    /**
     * CRC校验
     *
     * @param data 要校验的数据
     * @return crc
     */
    String crc16(String data);

}
